<?php

//策略模式
//它定义了算法家族，分别封装起来，让他们之间可以互相替换，此模式让算法的变化，不会影响到使用算法的客户

//优点
//相比简单工厂模式，在策略模式中，客户端只需要使用一个类CashContext，简单工厂用到了两个类Factory和具体的算法类，降低了客户端与各种算法类之间的耦合。

require_once '../autoload.php';

$cash_type = 2;
$ware_list = [
    [10, 2],
    [5, 3],
];

try {
    $total = 0;
    $cash_context = new CashContext($cash_type);
    foreach ($ware_list as $item) {
        [$price, $count] = $item;
        $total += $cash_context->getResult($price * $count);
    }

    fwrite(STDOUT, '商品总价是：' . $total);
} catch (Exception $e) {
    fwrite(STDOUT, $e->getMessage());
}